gtkspinbutton: Group up/down button gestures with self
authorCarlos Garnacho <carlosg@gnome.org>
Mon, 24 Aug 2020 12:45:42 +0000 (14:45 +0200)
committerCarlos Garnacho <carlosg@gnome.org>
Mon, 24 Aug 2020 12:55:47 +0000 (14:55 +0200)
We are adding click gestures on the up/down buttons, but can't let
the GtkButton built-in ones prevent ours to run.

As the saying goes, if you can't beat them, join them. Group the
spinbutton and GtkButton gestures together, so it's irrelevant which
gets called first and ends up winning.

Fixes: https://gitlab.gnome.org/GNOME/gtk/-/issues/3085
gtk/gtkspinbutton.c

index 0927efba90c070e74c43efdf673e54a4153a11da..5177e69d25a9071fa70d13e10782c7d04091a157 100644 (file)
@@ -32,6 +32,7 @@
 #include "gtkadjustment.h"
 #include "gtkbox.h"
 #include "gtkbutton.h"
+#include "gtkbuttonprivate.h"
 #include "gtkcssstylepropertyprivate.h"
 #include "gtkeditable.h"
 #include "gtkcelleditable.h"
@@ -966,6 +967,8 @@ gtk_spin_button_init (GtkSpinButton *spin_button)
   g_signal_connect (gesture, "released", G_CALLBACK (button_released_cb), spin_button);
   g_signal_connect (gesture, "cancel", G_CALLBACK (button_cancel_cb), spin_button);
   gtk_widget_add_controller (GTK_WIDGET (spin_button->down_button), GTK_EVENT_CONTROLLER (gesture));
+  gtk_gesture_group (gtk_button_get_gesture (GTK_BUTTON (spin_button->down_button)),
+                    gesture);
 
   spin_button->up_button = gtk_button_new_from_icon_name ("value-increase-symbolic");
   gtk_widget_add_css_class (spin_button->up_button, "up");
@@ -981,6 +984,8 @@ gtk_spin_button_init (GtkSpinButton *spin_button)
   g_signal_connect (gesture, "released", G_CALLBACK (button_released_cb), spin_button);
   g_signal_connect (gesture, "cancel", G_CALLBACK (button_cancel_cb), spin_button);
   gtk_widget_add_controller (GTK_WIDGET (spin_button->up_button), GTK_EVENT_CONTROLLER (gesture));
+  gtk_gesture_group (gtk_button_get_gesture (GTK_BUTTON (spin_button->up_button)),
+                    gesture);
 
   gtk_spin_button_set_adjustment (spin_button, NULL);